package com.ruoyi.produce.process.planself.mapper;

import com.ruoyi.produce.process.planself.domain.ProducePlanMonthlyProduction;
import com.ruoyi.produce.process.planself.domain.ProducePlanSelfCond;
import com.ruoyi.produce.process.planself.domain.ProducePlanSelfDomain;
import com.ruoyi.produce.process.planself.domain.ProducePlanSelfDto;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 自产生产计划
 * 数据层
 */
public interface ProducePlanSelfMapper {
    /**
     * 查找成品自产生产计划
     * @param cond
     * @return
     */
    List<ProducePlanSelfDto> selectProducePlanSelfListByFinished(ProducePlanSelfCond cond);

    /**
     * 查找未完成成品自产生产计划
     * @param cond
     * @return
     */
    List<ProducePlanSelfDto> selectProcessingProducePlanSelfListByFinished(ProducePlanSelfCond cond);

    /**
     * 查找对应半成品自产生产计划
     * @param planSelfIdParent
     * @return
     */
    List<ProducePlanSelfDto> selectProducePlanSelfByUnfinishedList(@Param("planSelfIdParent") String planSelfIdParent);

    /**
     * 获取最新的一条自产生产计划编号
     * @return
     */
    String getProducePlanSelfId();

    /**
     * 根据编号查找自产生产计划
     * @param planSelfId 自产生产计划编号
     * @return
     */
    ProducePlanSelfDto selectProducePlanSelfById(String planSelfId);

    /**
     * 根据销售订单编号查询生产计划编号
     * @param saleOrderId
     * @return
     */
    List<ProducePlanSelfDto> selectProducePlanSelfBySaleOrderId(String saleOrderId);

    /**
     * 新增自产生产计划
     * @param producePlanSelf
     * @return
     */
    int insertProducePlanSelf(ProducePlanSelfDomain producePlanSelf);

    /**
     * 更新自产生产计划
     * @param producePlanSelf
     * @return
     */
    int updateProducePlanSelf(ProducePlanSelfDomain producePlanSelf);

    /**
     * 删除自产生产计划
     * 仅修改删除标志
     * @param producePlanSelf
     * @return
     */
    int updateProducePlanSelfDeleteFlag(ProducePlanSelfDomain producePlanSelf);

    /**
     * 获取当前编号最大的生产计划
     * @return
     */
    String selectMaxProducePlanSelfId();

    /**
     * 更新计划结束状态
     * @return
     */
    int updateCompletionStatus(String planSelfId);

    /**
     * 更新生产计划结束时间
     * @return
     */
    public int updateProducePlanSelfEndTime(String planSelfId);

    /**
     * 更新审批状态
     * @param planSelfId
     * @return
     */
    int completeApprovalFlag(String planSelfId);

    /**
     * 拒绝审批状态
     * @param planSelfId
     * @return
     */
    int refuseApprovalFlag(String planSelfId);

    /**
     * 查询月销售产量
     * @return
     */
    List<ProducePlanMonthlyProduction> searchMonthlyProduction();
}
